
package appvideo.logica;

import appvideo.persistencia.Persistencia_Ingreso_Gasto;
import java.util.Date;
import java.util.Iterator;
import java.util.List;


public class Ingreso_Gasto {
    private int id;
    private String descripcion;
    private double cantidad;
    private int tipo;//para diferenciar gasto de ingreso;ingreso=1;gasto=2
    private Date fecha;

    public Ingreso_Gasto(int id, String descripcion, double cantidad, int tipo, Date fecha) {
        this.id = id;
        this.descripcion = descripcion;
        this.cantidad = cantidad;
        this.tipo = tipo;
        this.fecha = fecha;
    }
    
    public Ingreso_Gasto(String descripcion, double cantidad, int tipo, Date fecha) {
        this.descripcion = descripcion;
        this.cantidad = cantidad;
        this.tipo = tipo;
        this.fecha = fecha;
    }

    public double getCantidad() {
        return cantidad;
    }

    public void setCantidad(double cantidad) {
        this.cantidad = cantidad;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public Date getFecha() {
        return fecha;
    }

    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

    public int getId() {
        return id;
    }

    public int getTipo() {
        return tipo;
    }
    public void setTipo(int tipo){
        this.tipo=tipo;
    }
     @Override
    public String toString(){
        return this.id+" "+this.descripcion+" "+this.cantidad+" "+this.fecha;
    }
    //Recorre la lista de ingresos/gastos e imprime cada objeto de dicho tipo
    public static void imprimeLista(List<Ingreso_Gasto> l){
        for(Ingreso_Gasto ig: l){
            System.out.println(ig.toString());
        }
    }
    
    public void alta(String aux){
        if(Persistencia_Ingreso_Gasto.alta(this))
                System.out.println(aux+" insertado");
        else
            System.out.println(aux+" no se inserto");
    }
    public void modifica(){
        if(Persistencia_Ingreso_Gasto.modifica(this))
            System.out.println("Modificacion realizada");
        else
            System.out.println("Modificacion no realizada");
    }
    
    public static Ingreso_Gasto busca(int id,int tipo){
        return Persistencia_Ingreso_Gasto.busca(id,tipo);
    }
   
    //Muestra Ingresos o Gastos(segun tipo) de un mes, para ello se encarga de poner la
    //fecha de inicio y final de forma que coincida con la realidad
     public static void visualizaPorMes(int mes, int año, int tipo){
         List<Ingreso_Gasto> ingresosMes;
         
         String fechaIni=año+"-"+mes+"-01";
         String fechaFin=año+"-"+(mes+1)+"-01";
         if(mes==12){
            //Si es diciembre, cambio la fecha fin al 1 de enero del año siguiente
            fechaFin=(año+1)+"-01-01";
        }else if(mes<10){
            //Si el mes es menor de 10 solo tiene un digito, tenemos que meterle un cero para que no de error
            //en la consulta SQL
            fechaIni=año+"-0"+mes+"-01";
        }
        
        ingresosMes=Persistencia_Ingreso_Gasto.visualiza(fechaIni,fechaFin,tipo);
        
        System.out.println();
        imprimeLista(ingresosMes);
    }
     public static double balanceMensual(int mes, int año, int tipo){
         double totalMensual=0.00;
         List<Ingreso_Gasto> ingresosMes;
         
         String fechaIni=año+"-"+mes+"-01";
         String fechaFin=año+"-"+(mes+1)+"-01";
         if(mes==12){
            //Si es diciembre, cambio la fecha fin al 1 de enero del año siguiente
            fechaFin=(año+1)+"-01-01";
        }else if(mes<10){
            //Si el mes es menor de 10 solo tiene un digito, tenemos que meterle un cero para que no de error
            //en la consulta SQL
            fechaIni=año+"-0"+mes+"-01";
        }
        
        ingresosMes=Persistencia_Ingreso_Gasto.visualiza(fechaIni,fechaFin,tipo);
        
        Iterator it = ingresosMes.iterator();
        while(it.hasNext()){
            Ingreso_Gasto ig = (Ingreso_Gasto)it.next();
            totalMensual = totalMensual + ig.getCantidad();
        }
        return totalMensual;
     }
     
    //Este mes es identico al anterior, pero no controla los meses
     public static void visualizaPorAño(int año,int tipo){
         List<Ingreso_Gasto> ingresosAño;

        ingresosAño=Persistencia_Ingreso_Gasto.visualiza(año+"-01-01",(año+1)+"-01-01",tipo);
        
        System.out.println();
        imprimeLista(ingresosAño);
    }
     
     public static double balanceAnual(int año,int tipo){
        double totalAnual=0.00;
        List<Ingreso_Gasto> ingresosAño;

        ingresosAño=Persistencia_Ingreso_Gasto.visualiza(año+"-01-01",(año+1)+"-01-01",tipo);
        
        Iterator it = ingresosAño.iterator();
        while(it.hasNext()){
            Ingreso_Gasto ig = (Ingreso_Gasto)it.next();
            totalAnual = totalAnual + ig.getCantidad();
        }
        return totalAnual;
     }
     
}
